#include <iostream>
#include <unordered_map>
#include <cassert>
#include <vector>
#include <string>
#include <functional>
#include <unistd.h>

using namespace std;

typedef function<void()> func;

vector<func> callbacks;               // 回调任务
unordered_map<int, string> task_list; // 任务列表，显示给用户

void readMySQL() // 任务0
{
    std::cout << "sub process[" << getpid() << " ] 执行访问数据库的任务\n"
              << std::endl;
}

void execuleUrl() // 任务1
{
    std::cout << "sub process[" << getpid() << " ] 执行url解析"
              << std::endl;
}

void cal() // 任务2
{
    std::cout << "sub process[" << getpid() << " ] 执行加密任务"
              << std::endl;
}

void save() // 任务3
{
    std::cout << "sub process[" << getpid() << " ] 执行数据持久化任务"
              << std::endl;
}

void Load()
{
    task_list.insert(make_pair(callbacks.size(), "readMySQL:访问数据库")); // 下标是任务的编号
    callbacks.push_back(readMySQL);                                        // 注册任务

    task_list.insert(make_pair(callbacks.size(), "execuleUrl:url解析"));
    callbacks.push_back(execuleUrl);

    task_list.insert(make_pair(callbacks.size(), "cal:加密"));
    callbacks.push_back(cal);

    task_list.insert(make_pair(callbacks.size(), "save:数据持久化"));
    callbacks.push_back(save);
}

void show()
{
    for (const auto &iter : task_list)
    {
        cout << iter.first << "  ->  " << iter.second << endl; // 打印任务列表
    }
}

size_t handlerSize()
{
    return callbacks.size(); // 返回任务个数
}